package seueniumfordemoiselle.seleniumsimplify.utils;

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

/**
 * @author rogerio
 *
 *Representa a tabela com a listagem dos dados inseridos
 */
public class TabelaListagem  {
	
	List<WebElement> linhas;
	
	WebElement cabecalho;

	public TabelaListagem(WebDriver page) {
		this.cabecalho = page.findElement(By.xpath("//*[@id='resultListDataTable']//table//thead//tr"));
		this.linhas = page.findElements(By.xpath("//*[@id='resultListDataTable']//table//tbody//tr"));
	}
	
	/**
	 * @param nmColuna O nome da coluna em que o valor deve ser procurado
	 * @param vlColuna O valor a ser procurado
	 * @return Verdadeiro - se o valor for encontrado na coluna especificada ou False - se n�o achar
	 */
	public Boolean isRegistroPresente(String nmColuna, String vlColuna){
		int indice = indiceColuna(nmColuna);
		for (WebElement linha: this.linhas){
			if (linha.findElement(By.xpath("//td["+ Integer.toString(indice) + "]")).getText().equals(vlColuna)){
				return true;
			}
		}
		return false;
	}
	
	private int indiceColuna(String nome){
		int indice = 1;
		for (WebElement celula: cabecalho.findElements(By.xpath("//th"))){
			WebElement div = celula.findElement(By.xpath("//div"));
			WebElement span;
			try {
				span = div.findElement(By.xpath("//span"));
			}catch (NoSuchElementException e) {
				span = null;
			}
			if (span !=null){
				if (span.getText().equals(nome)){
					return indice;
				}
			}else{
				if (div.getText().equals(nome)){
					return indice;
				}
			}
			indice++;
		}
		return 0;
	}
	
	public void clicarAlterar(String nmColuna, String vlColuna, String nmColunaEditar){
		WebElement celula;
		int indice = indiceColuna(nmColuna);
		for (WebElement linha: this.linhas){
			celula = linha.findElement(By.xpath("//td["+ Integer.toString(indice) + "]"));
			if (celula.getText().equals(vlColuna)){
				int indiceEditar = indiceColuna(nmColunaEditar);
				linha.findElement(By.xpath("//td["+ Integer.toString(indiceEditar) + "]//a")).click();
			}
		}		
	}

	public void clicarApagar(String nmColuna, String vlColuna, String nmColunaApagar) {
		WebElement celula;
		int indice = indiceColuna(nmColuna);
		for (WebElement linha: this.linhas){
			celula = linha.findElement(By.xpath("//td["+ Integer.toString(indice) + "]"));
			if (celula.getText().equals(vlColuna)){
				int indiceEditar = indiceColuna(nmColunaApagar);				
				linha.findElement(By.xpath("//td["+ Integer.toString(indiceEditar) + "]//a")).click();
			}
		}		
		
	}
}
